Ejemplo CRUD (Flask)

Descripcion

Ejemplo de un CRUD en Flask.

Código de ejemplo (El código de abajo es un único archivo, este ejemplo tiene una mejor distribución del código en distintos archivos)

Metodo

Primero necesitamos instalar los siguientes paquetes:

pip install Flask Flask-SQLAlchemy

El código que usaremos será el siguiente:

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///crud_example.db'
db = SQLAlchemy(app)

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255), nullable=False)
    description = db.Column(db.Text, nullable=True)

@app.route('/tasks', methods=['GET'])
def get_tasks():
    tasks = Task.query.all()
    task_list = []
    for task in tasks:
        task_list.append({
            'id': task.id,
            'title': task.title,
            'description': task.description
        })
    return jsonify(task_list)

@app.route('/tasks/<int:id>', methods=['GET'])
def get_task(id):
    task = Task.query.get(id)
    if task:
        return jsonify({
            'id': task.id,
            'title': task.title,
            'description': task.description
        })
    return jsonify({'message': 'Task not found'}), 404

@app.route('/tasks', methods=['POST'])
def create_task():
    data = request.json
    title = data.get('title')
    description = data.get('description')
    task = Task(title=title, description=description)
    db.session.add(task)
    db.session.commit()
    return jsonify({'message': 'Task created successfully'}), 201

@app.route('/tasks/<int:id>', methods=['PUT'])
def update_task(id):
    task = Task.query.get(id)
    if not task:
        return jsonify({'message': 'Task not found'}), 404

    data = request.json
    task.title = data.get('title', task.title)
    task.description = data.get('description', task.description)
    db.session.commit()
    return jsonify({'message': 'Task updated successfully'})

@app.route('/tasks/<int:id>', methods=['DELETE'])
def delete_task(id):
    task = Task.query.get(id)
    if not task:
        return jsonify({'message': 'Task not found'}), 404

    db.session.delete(task)
    db.session.commit()
    return jsonify({'message': 'Task deleted successfully'})

@app.route('/tasks_filtered', methods=['GET'])
def get_task_filtered():
    title = request.args.get("title")

    tasks = Task.query.filter_by(title=title).all()

    tasks_list = []
    for task in tasks:
        tasks_list.append({
            'id': task.id,
            'title': task.title,
            'description': task.description
        })
    return jsonify(tasks_list)

if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

Para añadir nuevas tareas en este ejemplo lo podemos hacer con un comando como el siguiente:

curl -X POST -H "Content-Type: application/json" -d '{"title":"Nueva tarea","description":"Esta es una nueva tarea"}' http://localhost:5000/tasks
Tags

Python | Flask | CRUD